home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
c
/
datelib.exe
/
WEEKDAY.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-03-27
|
4KB
|
134 lines
static char weekday_prog[] = "@(#) int weekday(int tag,int monat,int jahr)";
static char weekday_s_prog[] = "@(#) int weekday_s(char *datestring)";
static char weekday_ver[] = "@(#) v1.00/kr ; 17.05.91";
/* weekday Funktionen zum Ermitteln eines beliebigen Wochentages
**
** Deklaration int weekday(int tag, int monat, int jahr);
** int weekday_s(char *datestring);
**
** Rückgabe Wochentagsnummer( Montag=1,..) oder 0 im Fehlerfall
**
** Autor Klaus Rath ( weekday beruht auf einer Beispielfunktion aus
** dem Nixdorf-Handbuch "Die Sprache C" )
**
** Anmerkungen weekday überprüft nur, ob Tag oder Monat den innerhalb eines
** Intervalls 1..31 bzw. 1..12 liegen, sowie ob das Jahr >= 0
** ist. Falls diese Bedingungen nicht erfüllt sind, wird 0
** zurückgegeben. Eine eingehendere Prüfung wird hier nicht
** durchgeführt !!!
** weekday_s verarbeitet nur vollständige Datümer, d.h. es wer-
** nur die langen Formate tt.mm.jjjj, mm/tt/jjjj und jjjjmmtt
** akzeptiert. Dies wird überprüft und im Fehlerfall 0 zurück-
** gegeben. Anschließend wird mit erzeugten int-Werten weekday
** aufgerufen.
** Die Übergabe von korrekten Datümern an weekday_s kann mit
** der Funktion checkdate() überprüft werden !
*/
int weekday(int tag,int monat,int jahr)
{
int jahrfak,ergebnis;
jahrfak = ergebnis = 0;
if ( tag < 1 || tag > 31 || monat < 1 || monat > 12 || jahr < 0 )
return(0);
jahrfak = jahr + ( monat-14)/12;
ergebnis = ( ( ( 13 * (monat + 10 - (monat + 10)/13 * 12) - 1 ) / 5
+ tag + 77 + 5*(jahrfak % 100)/4
+ jahrfak/400 - jahrfak/100*2 ) % 7 + 1 );
switch ( ergebnis ) {
case 1: ergebnis = 7;
break;
case 2: ergebnis = 1;
break;
case 3: ergebnis = 2;
break;
case 4: ergebnis = 3;
break;
case 5: ergebnis = 4;
break;
case 6: ergebnis = 5;
break;
case 7: ergebnis = 6;
break;
default:ergebnis = 0;
} /* ENDE: switch */
return(ergebnis);
}
#include <stdlib.h>
int weekday_s(char *datestring)
{
int ergebnis,jahr,monat,tag;
char jahr_s[5];
char monat_s[3];
char tag_s[3];
int laenge;
ergebnis = jahr = monat = tag = laenge = 0;
laenge = strlen(datestring);
if ( !( laenge == 10 || laenge == 8 ) )
return(0);
if ( datestring[2] == '.' && laenge == 10 ) {
tag_s[0] = datestring[0];
tag_s[1] = datestring[1];
tag_s[2] = '\0';
monat_s[0] = datestring[3];
monat_s[1] = datestring[4];
monat_s[2] = '\0';
jahr_s[0] = datestring[6];
jahr_s[1] = datestring[7];
jahr_s[2] = datestring[8];
jahr_s[3] = datestring[9];
jahr_s[4] = '\0';
}
else if ( datestring[2] == '/' && laenge == 10 ) {
tag_s[0] = datestring[3];
tag_s[1] = datestring[4];
tag_s[2] = '\0';
monat_s[0] = datestring[0];
monat_s[1] = datestring[1];
monat_s[2] = '\0';
jahr_s[0] = datestring[6];
jahr_s[1] = datestring[7];
jahr_s[2] = datestring[8];
jahr_s[3] = datestring[9];
jahr_s[4] = '\0';
}
else if ( laenge == 8 ) {
tag_s[0] = datestring[6];
tag_s[1] = datestring[7];
tag_s[2] = '\0';
monat_s[0] = datestring[4];
monat_s[1] = datestring[5];
monat_s[2] = '\0';
jahr_s[0] = datestring[0];
jahr_s[1] = datestring[1];
jahr_s[2] = datestring[2];
jahr_s[3] = datestring[3];
jahr_s[4] = '\0';
}
else
return(0);
tag = atoi(tag_s);
monat = atoi(monat_s);
jahr = atoi(jahr_s);
if ( tag < 1 || tag > 31 || monat < 1 || monat > 12 || jahr < 0 )
return(0);
ergebnis = weekday(tag,monat,jahr);
return(ergebnis);
}